package com.zhu.storesmanager.utils;

import java.util.ArrayList;
import java.util.List;

import com.zhu.storesmanager.models.ModelItem;

import android.content.Context;

/**
 * 销量数据
 */
public class SalesData {

	private static final String SPLIT_ONE = DataUtils.SPLIT_LINE; //型号和数量分割服
	public static final String SPLIT_MORE = DataUtils.SPLIT_ROW; //多条数据分割符号

	private Context mContext; //上下文
	private List<ModelItem> mModelList = new ArrayList<ModelItem>(); //保存的销量数据集合

	private static SalesData instance;

	public static SalesData getInstance(Context context) {
		if (instance == null) {
			instance = new SalesData(context);
		}
		return instance;
	}

	/**
	 * 构造函数
	 * @param context 上下文
	 */
	private SalesData(Context context) {
		mContext = context;
		loadSalesData();
	}

	/**
	 *加载当前销量数据 
	 */
	public void loadSalesData(){
		mModelList.clear();
		String data = PreferenceStore.getInstance(mContext).getString(PreferenceKeys.KEY_SALESDATA, "");
		parseData(data);
	}

	/**
	 * 解析销量数据
	 * @param data 保存的数据
	 */
	private void parseData(String data){
		synchronized (mModelList) {
			if(data != null && data.length() > 0){
				String[] more = data.split(SPLIT_MORE); //分割所有型号表数据
				if(more != null && more.length > 0){
					for(String item : more){
						String[] one = item.split(SPLIT_ONE); //分割型号和销量数据
						ModelItem mitem = new ModelItem();
						mitem.mName = one[0];
						mitem.mQuantity = Integer.parseInt(one[1]);
						mitem.mPrice = Integer.parseInt(one[2]);
						mModelList.add(mitem);
					}
				}
			}
		}
	}

	/**
	 * 更新销量数据
	 * @param updatelist 当前更新的销量数据集合
	 * @param deletelist 需要清空的销量数据集合
	 */
	public void updateSalesData(List<ModelItem> updateList, List<ModelItem> deleteList){
		Log.d("updatesize="+ updateList.size() +" deletesize="+deleteList.size());
		synchronized (mModelList) {
			if (deleteList != null) {
				for (ModelItem item : deleteList) {// 清除取消上报的数据集合
					ModelItem saveditem = getModelFromSaved(item);
					if(saveditem != null){
						mModelList.remove(saveditem);
					}
				}
			}
			if(updateList != null){
				for (ModelItem item : updateList) { // 更新新增数据
					ModelItem saveditem = getModelFromSaved(item);
					if (saveditem == null) { // 不存在则新增
						mModelList.add(item);
					} else { // 存在则更新销量和价格
						saveditem.mQuantity = item.mQuantity;
						saveditem.mPrice = item.mPrice;
					}
				}
			}
			saveDatatoLocal(); // 更新本地数据
		}
	}

	/**
	 * 查找指定型号销量型号是否存在保存的销量中
	 * @param item 指定型号数据
	 * @return ModelItem 存在则返回保存的数据 不存在则返回null
	 */
	private ModelItem getModelFromSaved(ModelItem item){
		for(ModelItem modelitem : mModelList){
			if(modelitem.mName.equals(item.mName)){
				return modelitem;
			}
		}
		return null;
	}

	/**
	 * 保存数据至本地
	 */
	private void saveDatatoLocal(){
		String data = "";
		for(ModelItem modelitem : mModelList){
			data += modelitem.mName + SPLIT_ONE + modelitem.mQuantity + SPLIT_ONE + modelitem.mPrice +SPLIT_MORE;
		}
		PreferenceStore.getInstance(mContext).putString(PreferenceKeys.KEY_SALESDATA, data);
	}

	/**
	 * 清空所有数据
	 */
	public void clearAllData(){
		synchronized (mModelList) {
			mModelList.clear();
			PreferenceStore.getInstance(mContext).putString(PreferenceKeys.KEY_SALESDATA, "");
		}
	}

	/**
	 * 从保存的更新型号销量数据
	 * @param item 需要更新的数据
	 */
	public void updateModelQuantity(ModelItem item){
		for(ModelItem modelitem : mModelList){
			if(modelitem.mName.equals(item.mName)){
				item.mQuantity = modelitem.mQuantity;
				item.mPrice = modelitem.mPrice;
				return;
			}
		}
	}

	/**
	 * 获取所有保存的销量数据
	 * @return 型号和销量列表数据
	 */
	public List<ModelItem> getSavedModelList(){
		List<ModelItem> list = new ArrayList<ModelItem>();
		list.addAll(mModelList);
		return list;
	}
}
